Node Affinity와 Anti-Affinity

Node Affinity와 Anti-Affinity는 특정 노드 특성에 따라 Pod가 어떤 노드에 배치될지를 제어하는 메커니즘입니다.

Node Affinity

Pod가 특정 노드 집합에 배치되도록 유도하는 규칙입니다. 노드의 레이블을 기반으로 합니다.

Node Anti-Affinity

Pod가 특정 노드 집합에 배치되지 않도록 하는 규칙입니다.

Pod Affinity/Anti-Affinity

다른 Pod와의 관계에 따라 Pod 배치를 제어하는 규칙입니다.

클라우드 네트워크 개념과 비교

실습 예시

Node Affinity 예시

apiVersion: v1
kind: Pod
metadata:
  name: nginx-with-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            operator: In
            values:
            - ssd
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: zone
            operator: In
            values:
            - zone1
  containers:
  - name: nginx
    image: nginx

Pod Anti-Affinity 예시

apiVersion: v1
kind: Pod
metadata:
  name: webapp
  labels:
    app: web
spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - web
        topologyKey: "kubernetes.io/hostname"
  containers:
  - name: webapp
    image: nginx

Affinity 타입

일반적인 사용 사례

Taint/Toleration과의 차이점

두 기능은 종종 함께 사용되어 더 정교한 Pod 배치 전략을 구현합니다.